#include <stdio.h>
#include <stdio_ext.h> // comentar e trocar __fpurge() para fpurge() caso MacOS
#include <stdlib.h>
#include <pthread.h>

typedef struct Send_feedback sFdb;
typedef struct BufferSend_Rede_Enlace bufS_RE;

struct Send_feedback
{
	int feedback; // 0 - OK | 1 - NOK (Nó não vizinho) | 2 - NOK (MTU excedido)
	int mtu_size; // MTU do enlace
};

struct BufferSend_Rede_Enlace
{
	int packetSize; // Tamanho do pacote (Rede) a ser enviado
	int dst_node;	// Numero do no de destino
	void *data;	// Dados do pacote
	struct Send_feedback fdb; // Resposta para o enviou (funcionou / não funcionou)
};

/*
typedef struct BufferReceive_Enlace_Rede bufR_ER;
struct BufferReceive_Enlace_Rede
{
	//??
};
*/

void init(const char *ciFile){
	system("clear");
	//printf("Iniciando threads de Enlace...\n");
	//enlace(ciFile);
/*	
	printf("Iniciando threads de Rede...\n");
	rede();
	printf("Iniciando threads de Transporte...\n");
	transporte();
*/
	printf("Pilha virtual esta pronta para uso!\n");
	system("clear");
}

int main (int argc, char** argv){

	extern FILE *stdin;
	bufS_RE sendBuffer;

	if(argc < 3)
	{
		perror("Faltam argumentos para iniciar o programa. (Ex.: ./[executavel] [Arquivo_CI] [No a emular]\n");
		exit(-1);
	}

	init(argv[1]);
	
	printf("Tamanho da mensagem a enviar: ");
	__fpurge(stdin); // limpa o buffer de entrada (similar ao fflush(), mas melhor)
	scanf("%d",&sendBuffer.packetSize);
	printf("Mensagem: ");
	fgets((char *)sendBuffer.data, sendBuffer.packetSize, stdin);
	printf("No destino: ");	
	__fpurge(stdin);
	scanf("%d", &sendBuffer.dst_node);
 
	exit(0);
}
